<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
    </body>
    <script>
       // var foo = 1;
       // function bar() {
       //  foo = 10;
       //  return;
       //  function foo(){

       //  }
       // }
       // bar();
       // console.log(foo);
       // 变量提升

       // 注释:
       //  第一步: var foo = 1;  全局变量foo被初始化赋值为1
       //  第二步: 执行bar()方法。
       //  第三步: bar()方法里，函数声明function foo(){}优先处理，这里js解析语法时，函数优先于一切。所以foo被初始化赋值为function(){}
       // 第四步: 先执行foo=10;这里制造了一个假象，认为没有用var声明指向的是外层foo=1.其实不是，而是先在自身函数体里找到foo声明，找到之前声明的function foo(){};赋值成10，只是局部变量的值的改写
       // 第五步: 输出foo,这时候找到额是全局变量var foo=1;输出1
       var foo = 1;
       function bar() {
           var foo = 10;
           // foo = 10;
           return foo;
       }
       bar();
       console.log(foo);
    </script>
</html>